<?php
require_once 'LoginHandler.php';
require_once 'LoginView.php';
require_once 'ErrorView.php';
require_once 'Register.php';
require_once 'NotesController.php';
require_once 'NotesHandler.php';
require_once 'NotesView.php';
require_once 'AdminController.php';


class LoginController
{
    private $m_database = NULL;
	private $m_tablePrefix = NULL;

    public function __construct(DatabaseConnection $database)
    {
        $this->m_database = $database;
		$this->m_tablePrefix = $database->getTablePrefix();
    }
    
    public function doControll()
    {
        $xhtml = "";
	
        // Skapar instanser av klasserna.
        $lh = new LoginHandler($this->m_database);
        $lw = new LoginView();
        $ew = new ErrorView();
        $Register = new Register($this->m_database);
        $NotesController = new NotesController($this->m_database);
		
		// Är användaren redan inloggad?
        if ($lh->isLoggedIn() == true)
        {
            // Har användaren klickat på logout-knappen.
            if ($lw->triedToLogout() == true)
            {
                // Logga ut användaren.
                $lh->doLogout();
                
                // Ge meddelande om att du är utloggad.
                $xhtml .= $ew->showMessage(2, "hint");
            }
			
			if($lw->triedToRemoveUser() == true)
			{
				// Skapar instanser av NotesHandler och NotesView.
				$NotesHandler = new NotesHandler($this->m_database);
				$NotesView = new NotesView();

				// Kollar om användaren har några Notes.
				if ($NotesHandler->hasNotes($NotesView->getUserId()) == true)
				{
					// Ta bort alla notes.
					$NotesHandler->removeAllNotes($NotesView->getUserId());
				}
			   
				// Tar bort användaren.
				$Register->removeUser($lw->getSessionUsername());
	
				// Loggar ut.
				$lh->doLogout();
	
				// Visar meddelande.
				$xhtml .= $ew->showMessage(9, "hint");
			}
        }
        else if($lw->isCookieSet() == true)
		{
			if ($lh->doLogin($lw->getCookieUsername(), $lw->getCookiePassword(), $this->m_tablePrefix) == false)
			{
				// Fel användarnamn och/eller lösenord. 
                $xhtml .= $ew->showMessage(3, "error");
			}
		}
		// Har användaren klickat på login-knappen?
		else if ($lw->triedToLogin() == true)
		{
		   // Stämmer uppgifterna.
		   if ($lh->doLogin($lw->getUserName(), $lw->getPassword()) == false)
		   {
			  // Fel användarnamn och/eller lösenord. 
			  $xhtml .= $ew->showMessage(3, "error");                  
		   }
		   
		   if($lw->triedToRemoveUser() == true)
			{
				// Skapar instanser av NotesHandler och NotesView.
				$NotesHandler = new NotesHandler($this->m_database);
				$NotesView = new NotesView();				
					  
				// Kollar om användaren har några Notes.
				if ($NotesHandler->hasNotes($NotesView->getUserId()) == true)
				{
					// Ta bort alla notes.
					$NotesHandler->removeAllNotes($NotesView->getUserId());
				}
			   
				// Tar bort användaren.
				$Register->removeUser($lw->getSessionUsername());
	
				// Loggar ut.
				$lh->doLogout();
			
				// Visar meddelande.
				$xhtml .= $ew->showMessage(9, "hint");
			}
	   	}
				
        // Är användaren redan inlogg?
        if($lh->isLoggedIn() == false)
        {
            return $xhtml . $lw->doLoginBox();
        }
		// isUserAdmin? 
		else if($lh->isUserAdmin($lw->getSessionUsername()) == true)
		{
			// Skapar en instans av AdminController.
			$AdminController = new AdminController($this->m_database);
			
			// Anroppar adminController-doControll.
			return $xhtml . $lw->doAdminFooter() . $AdminController->doControll();
		}
        else
        {
			// Kör NotesController.
            return $xhtml . $lw->doFooter() . $NotesController->doControll();
        }
    }
}